//引入公共函数
let util = require('../../utils/util');

//获得请求的URL
let requestDomain = util.config('requestDomain');

//存放页面实例的变量
let that;

let app = getApp();

//页面Page函数
Page({

    //页面的数据
    data: {

      //商户ID输入框值
      storeIdVal: '',

      storeName: '',
    
      //是否正在进行登录
      logining: false
    
    },

    /**
     * 页面加载时触发
     */

    onLoad: function() {

      //初始化小程序环境
      app.init();
      
      //存放页面实例
      that = this;

      //尝试从本地存储获取商户ID
      let storeId = wx.getStorageSync('storeId');

      let storeName = wx.getStorageSync('storeName');
      
      //判断商户ID是否存在
      if(storeId) {
        
        //将存在的商户ID更新到文本框内
        that.setData({
            storeIdVal: storeId,
            storeName: storeName || ''
        });

      }
    },

    onShow: function() {
      if(util.globalData('newStoreId')) {
        that.setData({
            storeName: util.globalData('newStoreName'),
            storeIdVal: util.globalData('newStoreId')
        });
        wx.setStorage({
            key: 'storeName',
            data: util.globalData('newStoreName'),
        });
        wx.setStorage({
          key: 'storeId',
          data: util.globalData('newStoreId')
        });
        wx.showToast({
            title: '激活成功',
            icon: 'success',
            mask: true
        });
      }
      //判断是否已登录切换到主页
      if (util.status('logined')) {
          util.status('logout', true);
          wx.removeStorageSync('_3rdSession');
          util.clearGlobalData();
          wx.closeSocket();
      }
    },

    /**
     * 监听商户ID输入框输入函数
     */

    storeIdInput: function(e) {

      //存放最新的输入内容
      that.data.storeIdVal = e.detail.value;

    },

    goRegister: function() {
      wx.navigateTo({
        url: '/pages/register/register',
        fail: function(res) {
          util.showError('错误提示', '跳转到激活页面失败');
        }
      });
    },

    /**
     * 触发登录函数
     */

    loginClick: function() {

      let {storeIdVal} = that.data;

      //判断输入的商户号是否为7位数
      if(storeIdVal.length < 7) {

        //显示错误
        wx.showModal({
          title: '系统提示',
          content: '输入的商户号有误，请检查'
        });

        //跳出执行
        return;
      
      }

      //错误内容列表
      let errorList = {

        '-2': '发送检查登录状态请求失败',
        '-3': '调用检查登录态接口时出错',
        '-5': 'wx.login微信登录失败',
        '-6': '获取用户信息失败，自动登录时无法获得用户信息',
        '-7': '执行微信登录操作失败',
        '-8': '获取用户信息失败，无法取得用户信息',
        '-9': '发送登录请求时发生错误',
        '-10': '登录时发生了错误'

      }

      //显示错误的函数
      let showError = function(title, code, err) {

        //隐藏顶部加载图标
        wx.hideNavigationBarLoading();

        //设置当前不在登录状态
        that.setData({logining: false});

        //判断是否传入了错误内容
        if(err) {

          //附加错误内容再显示错误提示
          util.showError(title, errorList[code + ''], err.errCode, err.errMsg);

          //跳出
          return;

        }

        //直接显示错误内容
        util.showError(title, errorList[code + ''], code);

      }

      //登录成功的函数
      let loginSuccess = function(result) {

        app.wsLogin(storeIdVal, {
          success: function() {

            //显示授权成功提示
            wx.showToast({
              title: '授权成功',
              icon: 'success',
              mask: true
            });

            let {storeData} = result;

            //存放商户ID到本地存储供下次进入小程序直接使用
            wx.setStorageSync('storeId', storeIdVal);

            wx.setStorageSync('storeName', storeData.storeName)

            //存放登录获得的数据到公共变量loginData备用
            util.globalData('loginData', result);

            //设置500毫秒后切换到服务界面
            setTimeout(function() {

              //切换页面到服务页面
              wx.switchTab({

                //切换的页面路径
                url: '/pages/userChat/userChat',

                //切换页面失败
                fail: function(err) {
                  
                  console.log(err);

                  //显示切换页面失败的错误
                  util.showError('切换页面失败', '小程序切换页面时出错，请重试');

                }

              });
            }, 500);

          },
          fail: function(errCode) {

            if(!errCode || util.status('appInit')) {
              return;
            }

            wx.hideNavigationBarLoading();
            
            that.setData({logining: false});

            wx.showModal({
              title: '连接失败',
              content: '与服务器建立实时通讯连接失败，请重新打开小程序重试'
            });

          }
        });
            
      }

      let startLogin = function() {

        //显示顶部加载图标
        wx.showNavigationBarLoading();

        //设置当前正在登录状态
        that.setData({logining: true});

        //存放商户ID
        util.globalData('storeId', storeIdVal);

        //调用检查用户登录状态函数
        that.checkLogin({

          //用户处于登录状态
          success: function(result) {

            console.log(result);

            //调用登录成功的函数
            loginSuccess(result);

          },

          //用户登录状态已失效
          fail: function(code, err) {

            if(code == -1 || code == -4) {

              //登录状态已失效
              that.login({

                //登录成功
                success: function(result) {

                  console.log(result);

                  //调用登录成功的函数
                  loginSuccess(result);

                },

                //登录失败
                fail: function(code, err) {

                  wx.hideNavigationBarLoading();

                  that.setData({logining: false});

                  if(code == -11) {
                    wx.showModal({
                      title: '找不到商户',
                      content: '不存在此商户，请确认商户号是否正确'
                    });
                    return;
                  }

                  //显示错误内容
                  showError('登录失败', code, err);

                }

              });

              //跳出
              return;

            }

            //判断是否未找到商户
            else if(code == -11) {

              //隐藏顶部加载图标
              wx.hideNavigationBarLoading();

              //显示错误提示
              wx.showModal({
                title: '商户不存在',
                content: '系统没有找到此商户，请检查商户号是否输入错误'
              });

              //设置当前不在登录状态
              that.setData({logining: false});

              //跳出
              return;

            }

            //显示错误内容
            showError('检查登录状态失败', code, err);

          }
        });
      }

      //判断是否与之前登录的商户不同
      if(storeIdVal != wx.getStorageSync('storeId') && wx.getStorageSync('storeId') != '') {

        wx.showModal({
          title: '切换提示',
          content: '您在此设备上登录过其它商户号，切换到新商户号将会清除在本地数据（用户数据、聊天记录、未确认的服务通知，聊天数据可在店铺设置中获取历史消息），确认切换？',
          success: function(modal) {
            if(modal.confirm) {

              wx.clearStorageSync();

              startLogin();
            
            }
          }
        });
      }
      else {

        startLogin();

      }
    },
    
    /**
     * 判断用户是否处于登录状态函数
     */

    checkLogin: function(callback) {

      //检查微信方面的登录态是否失效
      wx.checkSession({

        //登录态未失效
        success: function() {
          
          //从本地存储取出3rdSession
          let _3rdSession = wx.getStorageSync('_3rdSession');
          console.log('3rdSession为' + _3rdSession);
          
          //发起检测服务器端登录状态请求，附带3rdSession
          console.log('发起检查服务器上用户登录状态的请求');
          wx.request({
            url: requestDomain + 'user/checkLogin',
            data: {
              
              //商户ID
              storeId: util.globalData('storeId'),

              //3rdSession值
              _3rdSession: _3rdSession,

              //登录身份
              identity: 'service'

            },

            //接收的数据类型
            dataType: 'json',

            method: 'POST',

            //发送检测请求成功
            success: function(result){
              
              console.log('checkLogin接口返回的值：', result);

              //检查返回的数据是否正确
              if(util.checkSuccess(result) && result.data && result.data.data) {

                  result = result.data.data;

                  console.log('用户已处于登录状态');

                  //服务器的的3rd_session凭证未过期进行自动登录
                  wx.login({

                    //微信登录成功
                    success: function() {

                      //调用获取用户信息函数
                      wx.getUserInfo({

                        //获取用户信息成功
                        success: function(userData) {
                          
                          console.log('自动登录成功', result);

                          //隐藏顶部加载图标
                          wx.hideNavigationBarLoading();

                          //返回全部成功完成和数据
                          callback.success({

                            //用户数据
                            userData: userData.userInfo,

                            //商户数据
                            storeData: result.storeData,

                            //未读消息数组
                            unreadMsgs: result.unreadMsg || [],

                            noReceiveFunLogs: result.noReceiveFunLogs || [],

                            noDoneOrders: result.noDoneOrders || []

                          });

                        },

                        //获取用户信息失败
                        fail: function() {

                          //隐藏顶部加载图标
                          wx.hideNavigationBarLoading();

                          console.log('获取用户信息失败');

                          //返回获取用户信息失败
                          callback.fail(-6);

                        }
                      });
                    },

                    //微信登录失败
                    fail: function() {

                      //隐藏顶部加载图标
                      wx.hideNavigationBarLoading();

                      //微信登录失败
                      console.log('wx.login登录失败');

                      //返回微信登录失败
                      callback.fail(-5);

                    }
                  });

              }
              else if(util.checkSuccess(result, ['-0013'])) {

                  //返回未找到对应商户
                  callback.fail(-11);

              }
              else if(util.checkSuccess(result, ['-0004'])) {

                  console.log('用户登录态失效');

                  //返回登录状态已失效
                  callback.fail(-4);

              }
              else {

                  //返回调用检查登录态接口时出错
                  callback.fail(-3, result.data);

              }
            },

            //发送检测请求失败
            fail: function() {

              //返回检查登录状态请求发送失败
              callback.fail(-2);

            }
          });
        },

        //登录态已失效
        fail: function() {
          
          console.log('用户登录态失效');

          //直接返回所有登录状态已失效
          callback.fail(-1);

        }

      });   
  },

  login: function(callback) {

    //调用微信登录
    wx.login({

      //微信登录成功
      success: function(loginData) {
        
        console.log('微信登录成功');

        //请求的数据
        let requestData = {};

        //获得登录code
        requestData.wxCode = loginData.code;
        console.log('登录code为：' + requestData.wxCode);

        //调用获取用户信息函数
        wx.getUserInfo({

          //获取用户信息成功
          success: function(userData) {
            
            console.log('获取用户信息成功', userData);

            //获得加密数据
            requestData.wxEncryptedData = userData.encryptedData;
            console.log('加密数据为：' + requestData.wxEncryptedData);

            //获得iv向量
            requestData.wxIv = userData.iv;
            console.log('iv向量为：' + requestData.wxIv);

            //获得商户ID
            requestData.storeId = util.globalData('storeId');
            console.log('商户ID为：' + requestData.storeId);

            //指定登录身份为服务员
            requestData.identity = 'service';

            //发起登录请求
            wx.request({

              //登录接口地址
              url: requestDomain + 'user/login',

              //发送的数据
              data: requestData,

              //指定返回的数据为json
              dataType: 'json',

              method: 'POST',

              //登录发送请求成功
              success: function(loginData){

                console.log('登录请求完成，数据：', loginData);

                //检查返回的数据是否正确
                if(util.checkSuccess(loginData)) {

                  //获得登录数据，包括3rdSession和未读消息
                  loginData = loginData.data.data;

                  //取出3rdSession
                  let _3rdSession = loginData._3rdSession;

                  //存放3rdSession到公共变量以备使用
                  util.globalData('_3rdSession', _3rdSession);

                  //存入3rd_session到本地缓存
                  wx.setStorageSync('_3rdSession', _3rdSession);

                  console.log('登录成功，3rdSession为:' + _3rdSession);

                  //隐藏顶部加载图标
                  wx.hideNavigationBarLoading();

                  console.log('66666', loginData.noDoneOrders);

                  //返回登录成功以及登录的数据
                  callback.success({

                    //用户数据
                    userData: userData,

                    storeData: loginData.storeData,

                    //未读消息数组
                    unreadMsgs: loginData.unreadMsgs || [],

                    noReceiveFunLogs: loginData.noReceiveFunLogs || [],

                    noDoneOrders: loginData.noDoneOrders || []

                  });

                }
                else if(util.checkSuccess(loginData, ['-0013'])) {

                  //返回未找到对应商户
                  callback.fail(-11);

                }
                else {

                  //返回登录失败
                  callback.fail(-10, loginData.data);

                }
              },

              //登录请求发送失败
              fail: function() {
                
                //发送登录请求时发生错误
                callback.fail(-9);
                
              }
            })
          },

          //获取用户数据失败
          fail: function() {

            //返回获取用户数据失败
            callback.fail(-8);
            
          }
        });
      },

      //微信登录失败
      fail: function() {

        //返回微信登录操作失败
        callback.fail(-7);

      }
    });
  },
  cooperate: function() {
      wx.navigateTo({
          url: '/pages/cooperate/cooperate',
          fail: function() {
              wx.showModal({
                  title: '跳转失败',
                  content: '跳转到合作页面失败，请重试'
              });
          }
      })
  }
});